Laboratorio 2011-04
Esercizio 01
Si realizzi, in linguaggio C, in ambiente Unix/Linux, un programma in grado di visitare un albero di direttori visualizzandone (a video) il contenuto (in termini di sottodirettori e file).
Esercizio 02
Si implementi, in linguaggio C, in ambiente Unix/Linux, un programma in grado di duplicare una albero di direttori (i.e., un programma che realizzi il comando unix “cp –R”).
Il programma riceve sulla riga di comando due stringhe rappresentanti il pathname completo (path+nome) di due direttori.
Il programma replica il contenuto del primo direttorio (esistente) nel secondo (inesistente).
Per duplicazione si intende una copia del primo direttorio nel secondo, inclusi tutti i sottodirettori e tutti i file, ottenendo al termine del procedimento la stessa struttura gerarchica ad albero e gli stessi contenuti.
Esercizio 03
Due direttori si definiscono equivalenti se contengono le stesse informazioni, ovvero se, ricorsivamente, hanno lo stesso contenuto.
Si realizzi, in linguaggio C, in ambiente Unix/Linux, un programma concorrente in grado di determinare l’equivalenza di due direttori.
Il programma deve:
§ ricevere sulla riga di comando il pathname completo (path+nome) di due direttori
§ duplicarsi in due processi, in modo che il padre visiti ricorsivamente uno dei due direttorio e il figlio visiti ricorsivamente l’altro direttorio
§ i due processi (padre e figlio) devono sincronizzarsi a ogni file/direttorio rintracciato nella struttura gerarchica visitata per verificare che esso sia lo stesso. In caso affermativo continuano il procedimento. In caso negativo segnalano l’incongruenza e terminano.
Si limiti il confronto di equivalenza ai soli nomi dei file/direttori (non ci si occupi della dimensione, dei diritti di accesso, etc.).
Suggerimento
Per ogni direttorio/file rintracciato nella struttura, uno dei due processi trasferisce su una pipe all’altro processo il nome del direttorio/file trovato e quindi aspetta su un semaforo che l’altro processo verifichi le informazioni trasferite e lo svegli.